<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Document</title>
</head>

<body>
  <div id="box"></div>
  <div id="box1"></div>
  <script type="text/javascript" src="./js/react.development.js"></script>
  <!-- 提供了操作DOM的react扩展库 -->
  <script type="text/javascript" src="./js/react-dom.development.js"></script>
  <!-- 解析jsx语法的代码转换为js语法 -->
  <script type="text/javascript" src="./js/babel.min.js"></script>
  <script src="./js/prop-types.js"></script>
  <script type="text/babel">
    /* 
       组件的三大属性：state props refs

       state :react中很多地方都需要数据 在react中叫做状态 专门用来管理状态的对象 state
       作用：
       ①存储状态（数据）
       ② 通过更改组件的state来更新对应的页面的显示（重新渲染）
       操作state 初始化状态 读取状态 更新状态 this.setState()

       props
       不可更改的单项数据流
       组件对象都有props
       获取props属性值  this.props.xx
       数据从组件外向组件内传递
      可以对 props中的属性进行类型和必要性的限制

      refs 组件内部的标签可以定义ref属性标识某个标签
        */
      class Component1 extends React.Component {
        constructor(props) {
          super(props);
          this.getRef = this.getRef.bind(this);
        }
        getRef(){
          // 字符串的方式获取值
          console.log(this.refs);
          // 回调函数的方式获取值
          console.log(this.msginp.value);
        }
        render() {
          return (
            <div>
              {/* 字符串的方式标识ref  不推荐使用 */}
              <input type="text"  ref="inpVal"/>
              {/* 回调函数的方式来标识 推荐使用*/}
              <input type="text" ref={input=>this.msginp = input}/>
              <button onClick={this.getRef}>获取ref</button>
            </div>
          );
        }
      }
    
      ReactDOM.render(<Component1/>, document.getElementById("box"));
    </script>
</body>

</html>